/** 使用须知
 *   获取表格数据方法名统一为 getData
 *   数据集合命名为 data
 *   提交表单命名为 searchForm
 *   接口参数 req_param 从外到内填写接口名称
 *
 * 接口结构示例 外层文件夹名称 > 不同js文件分类 > 接口方法名称,按顺序填写相应名称
 * urls:{
   0:'schoolConfig',
   1:'classCircleList',
   2:'handleDelete'
}

 实际调取过程 this.$api['schoolConfig']['classCircleList']['getPageData']()
 **/
export default {
    data() {
        return {
            reqNum: 0, //请求次数
            loading: true, //表格加载变量
            // 页面绑定表格的对象用 searchForm
            searchForm: {},
            // 页面获取表格数据的接口
            urls: {
                0: 'schoolConfig',
                1: 'schoolList',
            },
        }
    },
    methods: {
        // 搜索事件
        async handleSearchChange(params, done) {
            this.loading = true
            //  将schoolName转为schoolid
            if (this.searchForm.schoolName && !isNaN(this.searchForm.schoolName)) this.searchForm.schoolId = this.searchForm.schoolName
            // this.searchCallBack 自定义搜索回调
            this.searchCallBack ? await this.searchCallBack(Object.assign({}, this.searchForm)) : await this.getData(this.searchForm)
            this.loading = false
            done()
        },
        // 分页加载
        async onLoad() {
            await this.getData(this.searchForm)
        },
        /**
         *生成数据 调取api
         * @returns {Promise<void>}
         */
        async getData(param) {
            //处理提交数据
            let subForm = Object.assign({}, param)
            delete subForm.schoolName
            delete subForm.$schoolName

            this.loading = true
            //调取api
            let api = this.$api

            Object.keys(this.urls).forEach((key) => {
                api = api[this.urls[key]]
            })
            // 赋值
            const res = await api(subForm)
            const second = this.reqNum++ ? 0 : 300
            //首次延迟赋值 解决表单分页被盖住
            setTimeout(async () => {
                // this.dataCallBack 处理数据回调
                this.dataCallBack ? await this.dataCallBack(res.data) : (this.data = (res.data))
                this.loading = false
            }, second)
            return res.data
        },
    },
}
